{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ML_in_Finance_Market_Impact\n",
    "# Author: Matthew Dixon and Igor Halperin\n",
    "# Version: 1.0 (14.10.2019)\n",
    "# License: MIT\n",
    "# Email: matthew.dixon@iit.edu\n",
    "# Notes: tested on Mac OS X with Python 3.6 and Tensorflow 1.3.0\n",
    "# Citation: Please cite the following reference if this notebook is used for research purposes:\n",
    "# Bilokon P., Dixon M.F. and I. Halperin, Machine Learning in Finance: From Theory to Practice, Springer Graduate textbook Series, 2020. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Market Impact Problem"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Assume that the broker has to sell $ N $ blocks of shares with $ n $ shares in each block, e.g. we can have N = 10, n = 1000.\n",
    "The state of the inventory at time $ t $ is then given by the variable $ X_t $ taking values in a set $ \\mathcal{X} $ with $ N = 10 $ states $ X^{(n)} $, so that the start point at $ t = 0 $ is $ X_0 = X^{(N-1)} $ and the target state is $ X_T = X^{(0)} = 0$. In each step, the agent has four possible actions $ a_t = a^{(i)} $ that measure the number of blocks of shares sold at time $ t $ where $ a^{(0)} = 0 $\n",
    "stands for no action, and $ a^{(i)} = i $\n",
    "with $ i = 1, \\ldots, 3$ is the number of blocks sold. The update equation is \n",
    "$$\n",
    "X_{t+1} = \\left(X_{t} - a_t \\right)_{+}\n",
    "$$\n",
    "Trades influence the stock price dynamics through a linear market impact\n",
    "$$\n",
    "S_{t+1} = S_{t} e^{\\left( 1 - \\nu a_t \\right)}\n",
    "+ \\sigma S_t Z_t \n",
    "$$\n",
    "where $\\nu$ is a market friction parameter. To map onto a finite MDP problem, a range of possible stock prices $ \\mathcal{S} $ can be discretized to $ M $ values, e.g. $ M = 12 $.\n",
    "The state space of the problem is given by a direct product of states $ \\mathcal{X} \n",
    "\\times \\mathcal{S} $ of dimension $ N \\times M = 10 \\cdot 12 = 120 $. The dimension of the extended space including the time is then $ 120 \\cdot 10 = 1200 $.\n",
    "\n",
    "The payoff of selling $ a_t$ \n",
    "blocks of shares when the stock price is \n",
    "$ S_t $ is $ n a_t S_t $. \n",
    "A risk-adjusted payoff adds a penalty on variance of the remaining inventory price at the next step $ t + 1$: $ r_t = na_tS_t - \\lambda n \\text{Var} \\left[ S_{t+1} X_{t+1} \\right] $.\n",
    "\n",
    "All combinations of state and time can then be represented as a three-dimensional grid of size $ N \\times M \\times   T = 10 \\cdot 12 \\cdot 10 $. \n",
    "A time-dependent action-value function $ Q_t(s_t, a_t)$ with four possible actions $ a_t = \\left\\{ a_{0}, a_{1}, a_{2}, a_{3}\n",
    "\\right\\} $ can then be stored as a rank-four tensor of dimension $ 10 \\times 12 \\times 10 \\times 4 $. \n",
    "\n",
    "We can now apply SARSA or Q-learning to learn optimal stock execution in such simplified setting. For exploration needed for on-line learning, one can use a\n",
    "$\\varepsilon $-greedy policy.  \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import the necessary libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib\n",
    "import pandas as pd\n",
    "\n",
    "from scipy.stats import norm\n",
    "\n",
    "import matplotlib.pyplot as plt \n",
    "\n",
    "from tqdm import tqdm \n",
    "\n",
    "import time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Markov Chain approximation for stock dynamics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parameter Initialization"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "S0 = 100      # initial stock price\n",
    "K = 100       # stike\n",
    "r = 0.05      # risk-free rate\n",
    "sigma = 0.15  # volatility\n",
    "mu = 0.05     # drift\n",
    "M = 1         # maturity\n",
    "\n",
    "T = 12        # number of time steps\n",
    "N_MC = 1000   # number of paths\n",
    "\n",
    "delta_t = M / T                # time interval\n",
    "gamma = np.exp(- r * delta_t)  # discount factor"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Markov Chain Approximation\n",
    "Approximate a continuous-time, continuous-space BSM dynamics by a discrete-time, discrete-space Markov Chain model for state variable $X_t$.\n",
    "\n",
    "Define a grid of $N$ discrete points in the $X$-space by the following relation.\n",
    "\n",
    "$$p_i=\\log S_0+\\frac{2i-N-1}{N-1}I_p\\quad i=1,...,N$$\n",
    "\n",
    "where $I_p=\\delta\\left(N\\right)\\sigma\\sqrt{T-t}$ and $\\delta\\left(N\\right)=2+\\log\\log N$. Also assume that $N$ is an odd number so that $p_{\\frac{N+1}{2}}=\\log S_0=X_0$.\n",
    "\n",
    "Mid-points between these grid points define separations between different cells for the continuous variable $X_t$.\n",
    "\n",
    "$$C_1=\\left(c_1,c_2\\right),\\quad C_i=\\left[c_i,c_i+1\\right)$$\n",
    "\n",
    "$$c_1=-\\infty,\\quad c_i=\\frac{p_{i-1}+p_i}{2}\\space\\space i=2,...,N,\\quad c_{N+1}=+\\infty$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "N = 25 # number of discrete states\n",
    "I = (2 + np.log(np.log(N))) * sigma * np.sqrt(T * delta_t)\n",
    "p = np.log(S0) + (2 * np.arange(1, N+1) - N - 1) / (N - 1) * I\n",
    "p = pd.DataFrame(p, index=range(1, N+1))\n",
    "c = (p.loc[2:,:] + p.shift(1).loc[2:,:]) / 2\n",
    "c.loc[1,:] = float('-inf')\n",
    "c.loc[N+1,:] = float('inf')\n",
    "c = c.sort_index(axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The transition probability from point $i$ to point $j$ on the grid in a time step $\\Delta t$ is given by the following expression.\n",
    "\n",
    "$$\n",
    "\\mathcal{p}_{ij}=\\mathcal{N}\\left(\\frac{c_{j+1}-p_i-\\left(\\mu-0.5\\sigma^2\\right)\\Delta t}{\\sigma\\sqrt{\\Delta t}}\\right)-\\mathcal{N}\\left(\\frac{c_{j}-p_i-\\left(\\mu-0.5\\sigma^2\\right)\\Delta t}{\\sigma\\sqrt{\\Delta t}}\\right)\n",
    "$$\n",
    "\n",
    "where $\\mathcal{N}\\left(\\cdot\\right)$ stands for the cumulative normal distribution function."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "transition_probability = pd.DataFrame([], index=range(1, N+1), columns=range(1, N+1))\n",
    "for i in range(1, N+1):\n",
    "    for j in range(1, N+1):\n",
    "        a = (c.loc[j+1,0] - p.loc[i,0] - (mu - 0.5*sigma**2)*delta_t)/(sigma*np.sqrt(delta_t))\n",
    "        b = (c.loc[j,0] - p.loc[i,0] - (mu - 0.5*sigma**2)*delta_t)/(sigma*np.sqrt(delta_t))\n",
    "        transition_probability.loc[i,j] = norm.cdf(a) - norm.cdf(b)\n",
    "transition_probability = transition_probability.astype('float')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>...</th>\n",
       "      <th>16</th>\n",
       "      <th>17</th>\n",
       "      <th>18</th>\n",
       "      <th>19</th>\n",
       "      <th>20</th>\n",
       "      <th>21</th>\n",
       "      <th>22</th>\n",
       "      <th>23</th>\n",
       "      <th>24</th>\n",
       "      <th>25</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>6.490793e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2.973683e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.397569e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>9.097484e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5.256099e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1.386999e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1.644476e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>...</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8.671984e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>...</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2.020639e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2.071065e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>9.308054e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>...</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>1.830127e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>...</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1.571478e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>...</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>5.885218e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>...</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>9.602649e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>...</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>6.820763e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>...</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.734302e-12</td>\n",
       "      <td>6.772360e-15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2.107639e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>...</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.150213e-09</td>\n",
       "      <td>5.741074e-12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2.831660e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>...</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.559046e-07</td>\n",
       "      <td>2.155954e-09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>...</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.612709e-05</td>\n",
       "      <td>3.580605e-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>4.193840e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>9.306224e-19</td>\n",
       "      <td>...</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.556188e-04</td>\n",
       "      <td>2.648515e-05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>4.619867e-72</td>\n",
       "      <td>4.193839e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>1.829970e-22</td>\n",
       "      <td>...</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.258474e-02</td>\n",
       "      <td>8.821040e-04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2.209534e-79</td>\n",
       "      <td>4.619867e-72</td>\n",
       "      <td>4.193839e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>1.571419e-26</td>\n",
       "      <td>...</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>8.373581e-02</td>\n",
       "      <td>1.346684e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>4.586924e-87</td>\n",
       "      <td>2.209534e-79</td>\n",
       "      <td>4.619867e-72</td>\n",
       "      <td>4.193839e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>5.885122e-31</td>\n",
       "      <td>...</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>2.537180e-01</td>\n",
       "      <td>9.720265e-02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>4.132396e-95</td>\n",
       "      <td>4.586924e-87</td>\n",
       "      <td>2.209534e-79</td>\n",
       "      <td>4.619867e-72</td>\n",
       "      <td>4.193839e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>9.602581e-36</td>\n",
       "      <td>...</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>3.517111e-01</td>\n",
       "      <td>3.509207e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1.615338e-103</td>\n",
       "      <td>4.132396e-95</td>\n",
       "      <td>4.586924e-87</td>\n",
       "      <td>2.209534e-79</td>\n",
       "      <td>4.619867e-72</td>\n",
       "      <td>4.193839e-65</td>\n",
       "      <td>1.653364e-58</td>\n",
       "      <td>2.831658e-52</td>\n",
       "      <td>2.107636e-46</td>\n",
       "      <td>6.820742e-41</td>\n",
       "      <td>...</td>\n",
       "      <td>2.070134e-15</td>\n",
       "      <td>2.018568e-12</td>\n",
       "      <td>8.651777e-10</td>\n",
       "      <td>1.635804e-07</td>\n",
       "      <td>1.370554e-05</td>\n",
       "      <td>5.117399e-04</td>\n",
       "      <td>8.571875e-03</td>\n",
       "      <td>6.487821e-02</td>\n",
       "      <td>2.233926e-01</td>\n",
       "      <td>7.026317e-01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>25 rows × 25 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "               1             2             3             4             5   \\\n",
       "1    6.490793e-01  2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04   \n",
       "2    2.973683e-01  3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02   \n",
       "3    7.397569e-02  2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02   \n",
       "4    9.097484e-03  6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01   \n",
       "5    5.256099e-04  8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01   \n",
       "6    1.386999e-05  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01   \n",
       "7    1.644476e-07  1.370554e-05  5.117399e-04  8.571875e-03  6.487821e-02   \n",
       "8    8.671984e-10  1.635804e-07  1.370554e-05  5.117399e-04  8.571875e-03   \n",
       "9    2.020639e-12  8.651777e-10  1.635804e-07  1.370554e-05  5.117399e-04   \n",
       "10   2.071065e-15  2.018568e-12  8.651777e-10  1.635804e-07  1.370554e-05   \n",
       "11   9.308054e-19  2.070134e-15  2.018568e-12  8.651777e-10  1.635804e-07   \n",
       "12   1.830127e-22  9.306224e-19  2.070134e-15  2.018568e-12  8.651777e-10   \n",
       "13   1.571478e-26  1.829970e-22  9.306224e-19  2.070134e-15  2.018568e-12   \n",
       "14   5.885218e-31  1.571419e-26  1.829970e-22  9.306224e-19  2.070134e-15   \n",
       "15   9.602649e-36  5.885122e-31  1.571419e-26  1.829970e-22  9.306224e-19   \n",
       "16   6.820763e-41  9.602581e-36  5.885122e-31  1.571419e-26  1.829970e-22   \n",
       "17   2.107639e-46  6.820742e-41  9.602581e-36  5.885122e-31  1.571419e-26   \n",
       "18   2.831660e-52  2.107636e-46  6.820742e-41  9.602581e-36  5.885122e-31   \n",
       "19   1.653364e-58  2.831658e-52  2.107636e-46  6.820742e-41  9.602581e-36   \n",
       "20   4.193840e-65  1.653364e-58  2.831658e-52  2.107636e-46  6.820742e-41   \n",
       "21   4.619867e-72  4.193839e-65  1.653364e-58  2.831658e-52  2.107636e-46   \n",
       "22   2.209534e-79  4.619867e-72  4.193839e-65  1.653364e-58  2.831658e-52   \n",
       "23   4.586924e-87  2.209534e-79  4.619867e-72  4.193839e-65  1.653364e-58   \n",
       "24   4.132396e-95  4.586924e-87  2.209534e-79  4.619867e-72  4.193839e-65   \n",
       "25  1.615338e-103  4.132396e-95  4.586924e-87  2.209534e-79  4.619867e-72   \n",
       "\n",
       "              6             7             8             9             10  ...  \\\n",
       "1   2.612709e-05  3.559046e-07  2.150213e-09  5.734302e-12  6.772360e-15  ...   \n",
       "2   8.556188e-04  2.612709e-05  3.559046e-07  2.150213e-09  5.734302e-12  ...   \n",
       "3   1.258474e-02  8.556188e-04  2.612709e-05  3.559046e-07  2.150213e-09  ...   \n",
       "4   8.373581e-02  1.258474e-02  8.556188e-04  2.612709e-05  3.559046e-07  ...   \n",
       "5   2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04  2.612709e-05  ...   \n",
       "6   3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04  ...   \n",
       "7   2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02  ...   \n",
       "8   6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02  ...   \n",
       "9   8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01  ...   \n",
       "10  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01  ...   \n",
       "11  1.370554e-05  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01  ...   \n",
       "12  1.635804e-07  1.370554e-05  5.117399e-04  8.571875e-03  6.487821e-02  ...   \n",
       "13  8.651777e-10  1.635804e-07  1.370554e-05  5.117399e-04  8.571875e-03  ...   \n",
       "14  2.018568e-12  8.651777e-10  1.635804e-07  1.370554e-05  5.117399e-04  ...   \n",
       "15  2.070134e-15  2.018568e-12  8.651777e-10  1.635804e-07  1.370554e-05  ...   \n",
       "16  9.306224e-19  2.070134e-15  2.018568e-12  8.651777e-10  1.635804e-07  ...   \n",
       "17  1.829970e-22  9.306224e-19  2.070134e-15  2.018568e-12  8.651777e-10  ...   \n",
       "18  1.571419e-26  1.829970e-22  9.306224e-19  2.070134e-15  2.018568e-12  ...   \n",
       "19  5.885122e-31  1.571419e-26  1.829970e-22  9.306224e-19  2.070134e-15  ...   \n",
       "20  9.602581e-36  5.885122e-31  1.571419e-26  1.829970e-22  9.306224e-19  ...   \n",
       "21  6.820742e-41  9.602581e-36  5.885122e-31  1.571419e-26  1.829970e-22  ...   \n",
       "22  2.107636e-46  6.820742e-41  9.602581e-36  5.885122e-31  1.571419e-26  ...   \n",
       "23  2.831658e-52  2.107636e-46  6.820742e-41  9.602581e-36  5.885122e-31  ...   \n",
       "24  1.653364e-58  2.831658e-52  2.107636e-46  6.820742e-41  9.602581e-36  ...   \n",
       "25  4.193839e-65  1.653364e-58  2.831658e-52  2.107636e-46  6.820742e-41  ...   \n",
       "\n",
       "              16            17            18            19            20  \\\n",
       "1   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "2   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "3   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "4   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "5   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "6   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "7   6.772360e-15  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "8   5.734302e-12  6.772360e-15  0.000000e+00  0.000000e+00  0.000000e+00   \n",
       "9   2.150213e-09  5.734302e-12  6.772360e-15  0.000000e+00  0.000000e+00   \n",
       "10  3.559046e-07  2.150213e-09  5.734302e-12  6.772360e-15  0.000000e+00   \n",
       "11  2.612709e-05  3.559046e-07  2.150213e-09  5.734302e-12  6.772360e-15   \n",
       "12  8.556188e-04  2.612709e-05  3.559046e-07  2.150213e-09  5.734302e-12   \n",
       "13  1.258474e-02  8.556188e-04  2.612709e-05  3.559046e-07  2.150213e-09   \n",
       "14  8.373581e-02  1.258474e-02  8.556188e-04  2.612709e-05  3.559046e-07   \n",
       "15  2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04  2.612709e-05   \n",
       "16  3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04   \n",
       "17  2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02   \n",
       "18  6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02   \n",
       "19  8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01   \n",
       "20  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01   \n",
       "21  1.370554e-05  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01   \n",
       "22  1.635804e-07  1.370554e-05  5.117399e-04  8.571875e-03  6.487821e-02   \n",
       "23  8.651777e-10  1.635804e-07  1.370554e-05  5.117399e-04  8.571875e-03   \n",
       "24  2.018568e-12  8.651777e-10  1.635804e-07  1.370554e-05  5.117399e-04   \n",
       "25  2.070134e-15  2.018568e-12  8.651777e-10  1.635804e-07  1.370554e-05   \n",
       "\n",
       "              21            22            23            24            25  \n",
       "1   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "2   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "3   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "4   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "5   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "6   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "7   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "8   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "9   0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "10  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "11  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "12  6.772360e-15  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "13  5.734302e-12  6.772360e-15  0.000000e+00  0.000000e+00  0.000000e+00  \n",
       "14  2.150213e-09  5.734302e-12  6.772360e-15  0.000000e+00  0.000000e+00  \n",
       "15  3.559046e-07  2.150213e-09  5.734302e-12  6.772360e-15  0.000000e+00  \n",
       "16  2.612709e-05  3.559046e-07  2.150213e-09  5.734302e-12  6.772360e-15  \n",
       "17  8.556188e-04  2.612709e-05  3.559046e-07  2.150213e-09  5.741074e-12  \n",
       "18  1.258474e-02  8.556188e-04  2.612709e-05  3.559046e-07  2.155954e-09  \n",
       "19  8.373581e-02  1.258474e-02  8.556188e-04  2.612709e-05  3.580605e-07  \n",
       "20  2.537180e-01  8.373581e-02  1.258474e-02  8.556188e-04  2.648515e-05  \n",
       "21  3.517111e-01  2.537180e-01  8.373581e-02  1.258474e-02  8.821040e-04  \n",
       "22  2.233926e-01  3.517111e-01  2.537180e-01  8.373581e-02  1.346684e-02  \n",
       "23  6.487821e-02  2.233926e-01  3.517111e-01  2.537180e-01  9.720265e-02  \n",
       "24  8.571875e-03  6.487821e-02  2.233926e-01  3.517111e-01  3.509207e-01  \n",
       "25  5.117399e-04  8.571875e-03  6.487821e-02  2.233926e-01  7.026317e-01  \n",
       "\n",
       "[25 rows x 25 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "transition_probability"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define function *random_with_probability* to generate random numbers between $1$ and $N$ with given probability."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Time Cost: 23.015048027038574 seconds\n"
     ]
    }
   ],
   "source": [
    "starttime = time.time()\n",
    "\n",
    "# state variable\n",
    "X = pd.DataFrame([], index=range(1, N_MC+1), columns=range(T+1))\n",
    "X.loc[:,0] = np.log(S0)\n",
    "\n",
    "# position of each state variable on the grid\n",
    "point = pd.DataFrame([], index=range(1, N_MC+1), columns=range(T+1))\n",
    "point.loc[:,0] = (N + 1) / 2\n",
    "\n",
    "for k in range(1, N_MC+1):\n",
    "    x = (N + 1) / 2\n",
    "    for t in range(1, T+1):\n",
    "        next_x = np.random.choice(np.arange(1,N+1),replace=True,p=transition_probability.loc[x,:])\n",
    "        x = next_x\n",
    "        point.loc[k,t] = x\n",
    "        X.loc[k,t] = p.loc[x,0]\n",
    "\n",
    "point = point.astype('int')\n",
    "\n",
    "endtime = time.time()\n",
    "print('\\nTime Cost:', endtime - starttime, 'seconds')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1170b2518>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot 5 paths\n",
    "plt.plot(X.T.iloc[:,[100,200,300,400,500]])\n",
    "plt.xlabel('Time Steps')\n",
    "plt.ylabel('State Variable Value')\n",
    "plt.twinx()\n",
    "plt.plot(point.T.iloc[:,[100,200,300,400,500]])\n",
    "plt.xlabel('Time Steps')\n",
    "plt.ylabel('Position on Grid')\n",
    "plt.title('State Variable Sample Paths')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on simulated state variable $X_t$ paths, compute stock price $S_t$ by the following relation.\n",
    "\n",
    "$$S_t=e^{X_t+\\left(\\mu-\\frac{\\sigma^2}{2}\\right)t\\Delta t}$$\n",
    "\n",
    "$$\\Delta S_t=S_{t+1}-e^{r\\Delta t}S_t\\quad t=0,...,T-1$$\n",
    "\n",
    "$$\\Delta\\hat{S}_t=\\Delta S_t-\\Delta\\bar{S}_t$$\n",
    "\n",
    "where $\\Delta\\bar{S}_t$ is the sample mean of all values of $\\Delta S_t$.\n",
    "\n",
    "Plot of 5 stock price $S_t$ paths is shown below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1175cdd30>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# stock price\n",
    "S = X.apply(lambda x: np.exp((x + (mu - 1/2 * sigma**2) * np.arange(T+1) * delta_t).astype('float')), axis=1)\n",
    "delta_S = S.loc[:, 1:T].values - np.exp(r * delta_t) * S.loc[:,0:T-1]\n",
    "delta_S_hat = delta_S.apply(lambda x: x - np.mean(x), axis=0)\n",
    "\n",
    "# plot 5 paths\n",
    "plt.plot(S.T.iloc[:,[100,200,300,400,500]])\n",
    "plt.xlabel('Time Steps')\n",
    "plt.title('Stock Price')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Setting Up the Market Impact Problem"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We assume $N=10$ number of blocks, $M = 12$ possible stock prices, and $T=10$ time steps. All combinations of state and time can then be represented as a three-dimensional grid of size $N\\times M\\times T = 10\\times 12\\times 10$. A time-dependent action-value function $ Q_t(s_t, a_t)$ with four possible actions $ a_t = \\left\\{ a_{0}, a_{1}, a_{2}, a_{3}\\right\\} $ can then be stored as a rank-four tensor of dimension $ 10 \\times 12 \\times 10 \\times 4 $. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Setting some global parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "BLOCK_SIZE = 1000\n",
    "NUM_BLOCKS = 10\n",
    "NUM_S      = 12  #number of discrete values of S\n",
    "NUM_TIME_STEPS = 10\n",
    "dt         = 1 # time step\n",
    "sigma      = 0.1 # volatility\n",
    "nu         = 1 # market friction parameter\n",
    "S0         = 1 # initial stock price\n",
    "lmbda      = 0.01 # risk aversion parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "EPSILON = 0.1# Probability for exploration\n",
    "\n",
    "ALPHA = 0.5# Step size\n",
    "\n",
    "GAMMA = 1 # Discount factor for Q-Learning and Sarsa"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define the list of possible actions. $\\left\\{ a_{0}, a_{1}, a_{2}, a_{3}\\right\\} $ The integer value matches the subscript and represents the number of stocks to sell in that time-step."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "ACTIONS = [0, 1, 2, 3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We define the state vector for the initial state: the maximum number of stocks, the initial price $S_0$, and time $t = 0$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "START = [NUM_BLOCKS - 1, S0, 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Step function that describes how the next state is obtained from the current state and the action taken. The function returns the next state and the reward obtained."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def step(state, action):\n",
    "    X, S, t = state\n",
    "    \n",
    "    # You can't sell more stock than you have\n",
    "    if action > X: \n",
    "        action = X\n",
    "    \n",
    "    # Calculate the number of stocks remaining\n",
    "    X_next = X - action\n",
    "    \n",
    "    # Calculate the resulting price movement\n",
    "    S_next = S*np.exp(1 - nu*action) + sigma*S*np.sqrt(dt)*np.random.randn() \n",
    "    # Quantise S_next to an allowed value\n",
    "    S_next = np.clip(np.ceil(S_next), 0, NUM_S-1))\n",
    "    \n",
    "    next_state = [X_next, np.int(S_next), t+dt]\n",
    "    \n",
    "    # Calculate the reward earned from the sale\n",
    "    mu = (np.exp(1 - nu * action) - 1) / dt\n",
    "    var = S_next**2*np.exp(2*mu*dt + sigma**2*dt)*(np.exp(sigma**2*dt)-1)\n",
    "    \n",
    "    reward = BLOCK_SIZE * action*S - lmbda*BLOCK_SIZE * X_next**2*var\n",
    "    \n",
    "    return next_state, reward"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "([9, 3, 1], -2299.981739633371)\n",
      "([1, 11, 3], -381.7527990337968)\n"
     ]
    }
   ],
   "source": [
    "# Check some state, action pairs and the associated reward\n",
    "print(step(START, 0))\n",
    "print(step([1,30,2], 0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Set up the agent's action policy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Given $S_t$ and $Q_t\\left( s_t, a_t\\right)$, this function chooses an action based on the epsilon-greedy algorithm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Choose an action based on epsilon greedy algorithm\n",
    "def choose_action(state, q_value, eps=EPSILON):\n",
    "    # With probability `eps', simply choose a random action - 'Exploration'\n",
    "    if np.random.binomial(1, eps) == 1:\n",
    "        action = np.random.choice(ACTIONS)\n",
    "    # Otherwise, choose from the actions with the highest\n",
    "    # q-value for the given state - 'Exploitation'\n",
    "    else:\n",
    "        values_ = q_value[state[0], state[1], state[2], :]\n",
    "        action = np.random.choice(\n",
    "            [action_ for action_, value_ in enumerate(values_) \n",
    "                                 if value_ == np.max(values_)])\n",
    "    # You cannot sell more stocks than you have\n",
    "    if action > state[0]:\n",
    "        action = state[0]\n",
    "    \n",
    "    return action"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For example, when `q_value` is all zeroes, the action taken is always random:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 3, 1, 3, 1, 3, 3, 0, 2, 2, 3, 2, 0, 0, 0, 1, 2, 2, 0, 0]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q_value = np.zeros((NUM_BLOCKS, NUM_S, NUM_TIME_STEPS, len(ACTIONS)))\n",
    "[choose_action(START, q_value, EPSILON) for i in range(20)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Set up the learning algorithms"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Sarsa and Expected Sarsa"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function simulates an episode with Sarsa. It takes the state-action value array `q_value` as an argument, initialises the state to `START`, defined above, and updates `q_value` according to the Sarsa algorithm, until the $T$ time steps have passed, or the stocks have all been sold. The cumulative reward earned is returned."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "def sarsa(q_value, expected=False, step_size=ALPHA, eps=EPSILON):\n",
    "    state = START\n",
    "    action = choose_action(state, q_value,eps)\n",
    "    rewards = 0.0\n",
    "    while (state[2] < (NUM_TIME_STEPS-1)*dt) and (state[0] > 0):\n",
    "        next_state, reward = step(state, action)\n",
    "        next_action = choose_action(next_state, q_value, eps)\n",
    "        rewards += reward\n",
    "        if not expected:\n",
    "            target = q_value[next_state[0], next_state[1], next_state[2], next_action]\n",
    "        else:\n",
    "            # Calculate the expected value of new state\n",
    "            target = 0.0\n",
    "            q_next = q_value[next_state[0], next_state[1], next_state[2], :]\n",
    "            best_actions = np.argwhere(q_next == np.max(q_next))\n",
    "            for action_ in ACTIONS:\n",
    "                if action_ in best_actions:\n",
    "                    target += ((1.0 - eps) / len(best_actions) \n",
    "                               + eps / len(ACTIONS)) * q_value[next_state[0], next_state[1], next_state[2], action_]\n",
    "                else:\n",
    "                    target += eps / len(ACTIONS) * q_value[next_state[0], next_state[1], next_state[2], action_]\n",
    "        target *= GAMMA\n",
    "        q_value[state[0], state[1], state[2], action] += step_size * (\n",
    "                reward + target - q_value[state[0], state[1], state[2], action])\n",
    "        state = next_state\n",
    "        action = next_action\n",
    "    return rewards"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Q-learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function simulates an episode with Q-learning. It takes the state-action value array `q_value` as an argument, initialises the state to `START`, defined above, and updates `q_value` according to the Q-learning algorithm, until the $T$ time steps have passed, or the stocks have all been sold. The cumulative reward earned is returned."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def q_learning(q_value, step_size=ALPHA, eps=EPSILON):\n",
    "    state = START\n",
    "    rewards = 0.0\n",
    "    \n",
    "    while (state[2] < (NUM_TIME_STEPS-1)*dt) and (state[0] > 0):\n",
    "        action = choose_action(state, q_value, eps)\n",
    "        next_state, reward = step(state, action)\n",
    "        rewards += reward\n",
    "        # Q-Learning update\n",
    "        Qhere = q_value[state[0], state[1], state[2], action]\n",
    "        \n",
    "        bestQnext = max(q_value[next_state[0], next_state[1], next_state[2], :])\n",
    "        \n",
    "        nextQhere = Qhere + step_size*(reward + GAMMA*bestQnext - Qhere)\n",
    "        \n",
    "        q_value[state[0], state[1], state[2], action] += step_size * (reward \n",
    "            + GAMMA * np.max(q_value[next_state[0], next_state[1], next_state[2], :]) \n",
    "            - q_value[state[0], state[1], state[2], action])\n",
    "        \n",
    "        if nextQhere !=  q_value[state[0], state[1], state[2], action]:\n",
    "            print()\n",
    "        \n",
    "        state = next_state\n",
    "    return rewards"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Running Sarsa and Q-learning to compare their asymptotic behaviour"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This function will plot the average (over `runs` independent trials) rewards earned by SARSA and Q-learning after each iteration (up to `episodes`)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "def figure_9_4(episodes=1000, runs=100):\n",
    "    EPOCH=25\n",
    "    \n",
    "    # Initialise the rewards arrays\n",
    "    rewards_sarsa = np.zeros(episodes)\n",
    "    rewards_q_learning = np.zeros(episodes)\n",
    "    \n",
    "    for r in tqdm(range(runs)):\n",
    "        # Initialise the state-action arrays \n",
    "        q_sarsa = np.zeros((NUM_BLOCKS, NUM_S, NUM_TIME_STEPS, len(ACTIONS)))\n",
    "        q_q_learning = np.copy(q_sarsa)\n",
    "        # Update the rewards and action value arrays for each episode\n",
    "        for i in range(0, episodes):\n",
    "            # The value of epsilon is decremented exponentially\n",
    "            # after every EPOCH episodes\n",
    "            eps = EPSILON*((1-EPSILON)**(i//EPOCH))\n",
    "            rewards_sarsa[i] += sarsa(q_sarsa, eps=eps)\n",
    "            rewards_q_learning[i] += q_learning(q_q_learning, eps=eps)\n",
    "    \n",
    "    # Averaging over independent runs\n",
    "    rewards_sarsa /= runs\n",
    "    rewards_q_learning /= runs\n",
    "    \n",
    "    # Draw reward curves\n",
    "    plt.plot(rewards_sarsa, label='Sarsa')\n",
    "    plt.plot(rewards_q_learning, label='Q-Learning')\n",
    "    plt.xlabel('Episodes')\n",
    "    plt.ylabel('Sum of rewards during episode')\n",
    "    plt.legend()\n",
    "\n",
    "    return q_sarsa, q_q_learning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 50/50 [06:57<00:00,  8.35s/it]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11754c2b0>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "q_sarsa, q_q_learning = figure_9_4(1200, 50)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Display the resulting optimal policies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def print_optimal_policy(q_value):\n",
    "    optimal_policy = np.zeros((NUM_BLOCKS, NUM_S, NUM_TIME_STEPS))\n",
    "    for i in range(0, NUM_BLOCKS):\n",
    "        for j in range(0, NUM_S):\n",
    "            for k in range(0, NUM_TIME_STEPS):\n",
    "                optimal_policy[i,j,k] = np.argmax(q_value[i, j, k, :])\n",
    "    for k in range(0, NUM_TIME_STEPS):\n",
    "      print(\"========= time step \" + str(k) + \"======\") \n",
    "      print(\" price: 1,2,3,4,5,6,7,8,9,10,11,12\")\n",
    "      for i in range(0, NUM_BLOCKS):\n",
    "        str_=\"inventory \" + str(i) + \":\"    \n",
    "        for j in range(0, NUM_S): \n",
    "            str_+=str(np.int(optimal_policy[i,j,k])) + ','\n",
    "        print(str_)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sarsa Optimal Policy:\n",
      "========= time step 0======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 1======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,3,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,1,2,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,2,0,0,0,0,0,0,0,0,\n",
      "========= time step 2======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,2,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,3,3,3,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,1,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,3,0,0,2,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 3======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,3,3,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,1,2,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,1,2,3,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,2,0,0,2,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 4======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,2,2,2,0,0,0,0,0,0,0,\n",
      "inventory 3:0,2,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,3,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,2,2,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,3,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 5======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,1,0,0,\n",
      "inventory 3:0,1,2,0,0,0,2,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 6======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,0,1,0,0,0,0,0,1,1,0,\n",
      "inventory 2:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 7======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,2,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 8======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 9======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "Q-Learning Optimal Policy:\n",
      "========= time step 0======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 1======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,1,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,3,3,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,3,0,0,0,0,0,0,0,0,\n",
      "========= time step 2======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,3,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,1,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,3,1,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,1,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,1,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 3======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,2,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,2,3,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,3,2,1,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,3,1,1,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,1,1,0,1,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,1,0,1,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 4======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,0,1,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,2,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,2,2,1,0,0,1,0,0,0,0,0,\n",
      "inventory 4:0,0,3,2,3,0,0,0,0,3,0,0,\n",
      "inventory 5:0,0,0,3,3,2,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,1,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,2,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 5======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,1,1,0,0,0,0,1,0,0,0,\n",
      "inventory 2:0,1,2,2,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,1,0,0,0,0,0,0,0,0,2,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,2,0,2,\n",
      "inventory 5:0,0,0,0,0,0,3,0,0,0,1,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,1,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 6======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,1,1,0,1,0,0,0,0,0,0,\n",
      "inventory 2:0,1,1,2,1,0,0,0,2,2,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,1,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,2,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 7======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,1,1,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,2,0,0,0,0,0,0,0,1,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,3,0,0,\n",
      "inventory 4:0,0,0,0,0,0,3,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 8======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,1,0,0,0,0,1,0,0,0,0,1,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "========= time step 9======\n",
      " price: 1,2,3,4,5,6,7,8,9,10,11,12\n",
      "inventory 0:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 1:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 2:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 3:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 4:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 5:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 6:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 7:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 8:0,0,0,0,0,0,0,0,0,0,0,0,\n",
      "inventory 9:0,0,0,0,0,0,0,0,0,0,0,0,\n"
     ]
    }
   ],
   "source": [
    "print('Sarsa Optimal Policy:')\n",
    "print_optimal_policy(q_sarsa)\n",
    "print('Q-Learning Optimal Policy:')\n",
    "print_optimal_policy(q_q_learning)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
